package com.gelian.geliansdk.listener;

import com.gelian.library.d;
import com.gelian.library.model.GlDevice;
import com.gelian.library.model.GlFileInfo;

import java.util.List;

/**
 * 个联监听接口，监听所有来自云端的信息
 */
public abstract class GlListener implements d {
    @Override
    public void a() {
        otherLoginNotice();
    }

    @Override
    public void b(String imei, byte[] payload) {
        receivePayloadFromDevice(imei, payload);
    }

    @Override
    public void c(byte[] payload) {
        receivePayloadFromSever(payload);
    }

    @Override
    public void d(String imei, GlFileInfo fileInfo) {
        receiveFileFromDevice(imei, fileInfo);
    }

    @Override
    public void e(List<GlDevice> devices) {
        deviceListChange(devices);
    }

    @Override
    public void f(String imei, String applyName, String responseMessage) {
        receivedPermissionRequest(imei, applyName, responseMessage);
    }

    @Override
    public void g(String imei, boolean isApprove) {
        receivedPermissionResponse(imei, isApprove);
    }

    //    @Override
    //    public void h(String imei, HashMap<Integer, Object> map_id_value) {
    //        receiveDeviceIdValueMap(id, map_id_value);
    //    }

    /**
     * 账号在其他手机登录
     * <p>
     * 收到该通知后，账号会在本机强制下线
     */
    public abstract void otherLoginNotice();

    /**
     * 数据透传(来自设备)
     *
     * @param imei    设备的唯一imei
     * @param payload 透传的数据
     */
    public abstract void receivePayloadFromDevice(String imei, byte[] payload);

    /**
     * 数据透传(来自云端或者其他用户)
     *
     * @param payload 透传的数据
     */
    public abstract void receivePayloadFromSever(byte[] payload);

    /**
     * 文件共享(来自设备)
     *
     * @param imei     设备的唯一imei
     * @param fileInfo 共享文件的信息
     */
    public abstract void receiveFileFromDevice(String imei, GlFileInfo fileInfo);


    /**
     * 设备列表有变动
     *
     * @param devices GlDevice对象中包含设备在线状态，设备名称等信息
     */
    public abstract void deviceListChange(List<GlDevice> devices);


    /**
     * 收到权限请求
     * <p>
     * 当其他用户申请绑定一个私有权限的设备的时候，该设备的管理员用户会收到申请通知
     *
     * @param imei            设备的唯一imei
     * @param applyName       申请者用户名
     * @param responseMessage 该次申请的唯一标识，响应时候将其传入sdk
     */
    public abstract void receivedPermissionRequest(String imei, String applyName, String responseMessage);


    /**
     * 收到权限请求的处理结果
     * <p>
     * 当设备管理员批复用户的权限申请，该用户会收到处理结果通知
     *
     * @param imei      设备的唯一imei
     * @param isApprove 是否同意
     */
    public abstract void receivedPermissionResponse(String imei, boolean isApprove);


}
